package com.liuya.base;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.liuya.page.Pageable;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @author liuya
 * @date 20160824
 */
public interface BaseService<T extends BaseModel> extends Serializable{

    /**
     * 直接从数据库中查询所有数据
     * @param params
     * @return
     */
    public List<T> selectList(Map<String, Object> params);

//    /**
//     * 查询数据，默认先从redis中查询，如果不存在从数据库中查询。
//     * 注意，使用不当将造成性能低下。
//     * @param ids
//     * @param cls
//     * @return
//     */
//    public <K> List<K> selectByIds(List<String> ids, Class<K> cls);

    /**
     * 根据Id查询
     */
    public T selectById(String id);

//    /**
//     * 查询返回分页数据，此方法从数据库加载最小数据，之后从redis中查询完全记录，如果不存在从数据库中查询。
//     * 注意，使用不当将造成性能低下。
//     * @param params
//     * 分页及SQL参数
//     * @return
//     */
//    public PageInfo<T> select(Map<String, Object> params);

    /**
     * 查询并返回分页数据，不使用redis，直接从数据库中查询。
     * @param params
     * 分页及SQL参数
     * @return
     */
    public Pageable<T> selectPage(Map<String, Object> params);

    /**
     * 查询并返回分页数据，不使用redis，直接从数据库中查询。
     * @param pageable
     * 分页及SQL参数
     * @return
     */
    public Pageable<T> selectPage(Pageable pageable);

//    /**
//     * 查询数据，默认先从redis中查询，如果不存在从数据库中查询。
//     * 注意，使用不当将造成性能低下。
//     * @param ids
//     * @return
//     */
//    @Deprecated
//    public PageInfo<T> selectPageByIds(Page<String> ids);

//    /**
//     * 查询数据，默认先从redis中查询，如果不存在从数据库中查询。
//     * 注意，使用不当将造成性能低下。
//     * @param ids
//     * @param cls
//     * @return
//     */
//    @Deprecated
//    public <K> PageInfo<K> selectPageByIds(Page<String> ids, Class<K> cls);

    /**
     * 修改
     */
    public T update(T record);

    /**
     * 新增
     */
    public void add(T record);

    /**
     * 删除
     */
    public void delete(T record);

    /**
     * 删除
     */
    public void deleteById(String id);

    public void init();

}
